// Source :
// Author : simba
// Date   : 2017-04-17
/**********************************************************************************
*插入排序.从第二个元素开始循环整个数组，找到比当前元素小的i，然后交换数据。直到循环完全部数据。
**********************************************************************************/


package main

//引用包
import (
    "fmt"
    "math/rand"
    "time"
)

//随机生成最少3个、最多20个的整型数组
func createArray() []int {
    var column int
    s := rand.NewSource(time.Now().UnixNano())
    r := rand.New(s)
    column = r.Intn(17) + 3

    res := make([]int, column)
    for i := 0; i < column; i++ {
        s1 := rand.NewSource(time.Now().UnixNano())
        r1 := rand.New(s1)
        res[i] = r1.Intn(1024)
    }

    return res
}

func InsertSort(a []int) {
    for j := 1; j < len(a); j++ {
        var key = a[j]
        var i = j - 1
        for ; i >= 0 && a[i] > key; i-- { //a[i] > key 是按照升序排列，a[i] < key 是按照降序排列。
            a[i+1] = a[i]
        }
        a[i+1] = key
        for _, v := range a {
            fmt.Print(v, " ")
        }
        fmt.Println()
    }
}

func main() {
    a := createArray()
    for _, v := range a {
        fmt.Print(v, " ")
    }
    fmt.Println()
    InsertSort(a)
}
